import { BASE_URL } from '@/utils/request.js';
/**
 * 上传图片
 * @param {string} filePath 临时文件路径
 * @returns {Promise} 返回上传结果
 */
export function uploadImage(filePath) {
    return new Promise((resolve, reject) => {
        console.log('开始上传文件:', filePath);

        // 针对H5环境特殊处理
        // #ifdef H5
        if (filePath && (filePath.startsWith('blob:') || filePath.startsWith('data:'))) {
            // 获取 token
            const token = uni.getStorageSync('token') || '';
            
            try {
                // 从base64或blob URL创建一个临时表单
                fetch(filePath)
                    .then(res => res.blob())
                    .then(blob => {
                        const formData = new FormData();
                        formData.append('file', blob, 'image.png');
                        formData.append('type', 'image');
                        
                        // 使用fetch API直接上传
                        fetch(BASE_URL + '/file/upload', {
                            method: 'POST',
                            body: formData,
                            headers: {
                                'Authorization': token
                            }
                        })
                        .then(response => response.json())
                        .then(data => {
                            console.log('H5上传响应:', data);
                            resolve(data);
                        })
                        .catch(error => {
                            console.error('H5上传失败:', error);
                            reject(error);
                        });
                    })
                    .catch(error => {
                        console.error('获取blob失败:', error);
                        reject(error);
                    });
                
                return; // 提前返回，避免执行后续代码
            } catch (error) {
                console.error('H5特殊处理失败:', error);
                // 继续使用标准上传方式
            }
        }
        // #endif

        uni.uploadFile({
            url: BASE_URL + '/file/upload',
            filePath: filePath,
            name: 'file',
            formData: {
                'type': 'image'
            },
            header: {
                'Authorization': uni.getStorageSync('token') || '',
                'Content-Type': 'multipart/form-data'
            },
            success: (res) => {
                console.log('上传响应原始数据：', res);
                
                // 检查响应状态码
                if (res.statusCode === 200) {
                    try {
                        // 尝试解析响应数据
                        const data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data;
                        console.log('解析后的响应数据：', data);
                        
                        // 检查响应数据结构
                        if (data && (data.code === 200 || data.url)) {
                            // 如果返回了URL，直接使用
                            if (data.url) {
                                resolve({ code: 200, data: { url: data.url } });
                            } else {
                                resolve(data);
                            }
                        } else {
                            console.warn('响应数据格式不符合预期：', data);
                            // 如果响应数据不符合预期格式，但确实上传成功了，返回一个默认的成功响应
                            resolve({ 
                                code: 200, 
                                data: { 
                                    url: data.url || data.data?.url || '' 
                                } 
                            });
                        }
                    } catch (e) {
                        console.error('解析响应数据失败：', e);
                        // 如果解析失败，但状态码是200，可能意味着上传成功
                        resolve({ 
                            code: 200, 
                            data: { 
                                url: res.data // 直接使用原始数据作为URL
                            } 
                        });
                    }
                } else {
                    console.error('上传失败，状态码：', res.statusCode);
                    reject(new Error(`上传失败，状态码：${res.statusCode}`));
                }
            },
            fail: (err) => {
                console.error('上传请求失败：', err);
                reject(err);
            }
        });
    });
} 